package br.com.redejava.ciep.app;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import br.com.redejava.ciep.negocio.Cidade;
import br.com.redejava.ciep.negocio.Fornecedor;
import br.com.redejava.ciep.negocio.Loja;
import br.com.redejava.ciep.negocio.Produto;
import br.com.redejava.ciep.negocio.URE;
import br.com.redejava.ciep.relatorio.Relatorio;

public class App {
	public static Map<Integer, Cidade> cidades = new HashMap<>();

    public static void main(String args[]) {
    	init();

    	cidades.get(1).getLoja().venderProduto("arroz", 1);

    	//Quantidade de arroz na loja de Manaus
    	System.out.printf("%s ", cidades.get(1).getLoja().getNome());
    	cidades.get(1).getLoja().informarQuantidadeProduto("arroz");
    	System.out.println();

    	//Estoque da Loja e UREs mais próximas
    	//cidades.get(1).getLoja().informarQuantidadeProdutos();
    	cidades.get(1).getUre().informarQuantidadeProdutos();
    	cidades.get(1).getLoja().getUresMaisProximas().forEach(i -> i.informarQuantidadeProdutos());

    	//URE que mais fez solicitações de produtos
    	Relatorio.imprimirUreMaisSolicitacoes();
    }

    public static void init() {
    	//Instância das capitais bem como seus centros de distribuição e lojas
    	Cidade manaus = new Cidade(1, "Manaus", new URE(), new Loja());
    	Cidade curitiba = new Cidade(2, "Curitiba", new URE(), new Loja());
    	Cidade beloHorizonte = new Cidade(3, "Belo Horizonte", new URE(), new Loja());
    	Cidade recife = new Cidade(4, "Recife", new URE(), new Loja());
    	Cidade goiania = new Cidade(5, "Goiânia", new URE(), new Loja());

    	//Mapeando cidades como opções
    	cidades.put(manaus.getCodigo(), manaus);
    	cidades.put(curitiba.getCodigo(), curitiba);
    	cidades.put(beloHorizonte.getCodigo(), beloHorizonte);
    	cidades.put(recife.getCodigo(), recife);
    	cidades.put(goiania.getCodigo(), goiania);

    	//Definição de distâncias entre UREs - Em ordem
    	//Lojas
    	manaus.getLoja().addUreMaisProxima(recife.getUre());
    	manaus.getLoja().addUreMaisProxima(goiania.getUre());
    	manaus.getLoja().addUreMaisProxima(beloHorizonte.getUre());
    	manaus.getLoja().addUreMaisProxima(curitiba.getUre());
    	recife.getLoja().addUreMaisProxima(beloHorizonte.getUre());
    	recife.getLoja().addUreMaisProxima(manaus.getUre());
    	recife.getLoja().addUreMaisProxima(goiania.getUre());
    	recife.getLoja().addUreMaisProxima(manaus.getUre());
    	goiania.getLoja().addUreMaisProxima(beloHorizonte.getUre());
    	goiania.getLoja().addUreMaisProxima(curitiba.getUre());
    	goiania.getLoja().addUreMaisProxima(manaus.getUre());
    	goiania.getLoja().addUreMaisProxima(recife.getUre());
    	beloHorizonte.getLoja().addUreMaisProxima(curitiba.getUre());
    	beloHorizonte.getLoja().addUreMaisProxima(goiania.getUre());
    	beloHorizonte.getLoja().addUreMaisProxima(recife.getUre());
    	beloHorizonte.getLoja().addUreMaisProxima(manaus.getUre());
    	curitiba.getLoja().addUreMaisProxima(beloHorizonte.getUre());
    	curitiba.getLoja().addUreMaisProxima(goiania.getUre());
    	curitiba.getLoja().addUreMaisProxima(recife.getUre());
    	curitiba.getLoja().addUreMaisProxima(manaus.getUre());
    	//UREs
    	manaus.getUre().setUreMaisProxima(goiania.getUre());
    	recife.getUre().setUreMaisProxima(beloHorizonte.getUre());
    	goiania.getUre().setUreMaisProxima(beloHorizonte.getUre());
    	beloHorizonte.getUre().setUreMaisProxima(curitiba.getUre());
    	curitiba.getUre().setUreMaisProxima(beloHorizonte.getUre());

    	//Definição de estoques de produtos
    	List<String> produtos = new ArrayList<String>();
    	produtos.addAll(Arrays.asList("refrigerante", "suco", "arroz", "feijão", "fubá",
    								   "óleo", "sabão", "detergente", "sabonete", "creme dental", "shampoo"));
    	produtos.forEach(i -> {
    		manaus.getLoja().addProduto(new Produto(new Fornecedor(), i, 0));
    		manaus.getUre().addProduto(new Produto(new Fornecedor(), i, 0));
    		curitiba.getLoja().addProduto(new Produto(new Fornecedor(), i, 0));
    		curitiba.getUre().addProduto(new Produto(new Fornecedor(), i, 0));
    		beloHorizonte.getLoja().addProduto(new Produto(new Fornecedor(), i, 0));
    		beloHorizonte.getUre().addProduto(new Produto(new Fornecedor(), i, 0));
    		recife.getLoja().addProduto(new Produto(new Fornecedor(), i, 0));
    		recife.getUre().addProduto(new Produto(new Fornecedor(), i, 0));
    		goiania.getLoja().addProduto(new Produto(new Fornecedor(), i, 0));
    		goiania.getUre().addProduto(new Produto(new Fornecedor(), i, 0));
    	});
    }
}
